#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int n, m;
cin >> n >> m;
map<string, int> k;
set<string> a;
vector<string> g;
string s;
while (n--)
{
cin >> s;
k[s]++;
a.insert(s);
g.push_back(s);
}
ll mx = 0;
string j, r;
for (auto x : k)
{
r = x.first;
reverse(r.begin(), r.end());
if (x.second > mx && r == x.first)
{
mx = x.second;
j = x.first;
}
}
deque<string> dq;
while (mx--)
{
dq.push_back(j);
}
if (dq.size())
{
a.erase(j);
k[j] = 0;
}
for (auto x : g)
{
if (k[x] != 0)
{
r = x;
reverse(r.begin(), r.end());
if (a.find(r) != a.end())
{
if ((x == r && k[x] % 2 == 0))
{
dq.push_back(x);
dq.push_front(r);
}
else if (x != r)
{
dq.push_back(x);
dq.push_front(r);
}
k[x]--;
k[r]--;
}
if (k[x] == 0 || k[r] == 0)
{
a.erase(x);
a.erase(r);
}
}
}
ll si = 0;
for (auto x : dq)
{
si += x.size();
}
cout << si << endl;
for (auto x : dq)
{
cout << x;
}
}
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts | 501A - Contest |
160A- Twins | 752. Open the Lock |
1535A - Fair Playoff | 1538F - Interesting Function |
1920. Build Array from Permutation | 494. Target Sum |
797. All Paths From Source to Target | 1547B - Alphabetical Strings |
1550A - Find The Array | 118B - Present from Lena |
27A - Next Test | 785. Is Graph Bipartite |
90. Subsets II | 1560A - Dislike of Threes |
36. Valid Sudoku | 557. Reverse Words in a String III |
566. Reshape the Matrix | 167. Two Sum II - Input array is sorted |
387. First Unique Character in a String | 383. Ransom Note |
242. Valid Anagram | 141. Linked List Cycle |
21. Merge Two Sorted Lists | 203. Remove Linked List Elements |
733. Flood Fill | 206. Reverse Linked List |
83. Remove Duplicates from Sorted List | 116. Populating Next Right Pointers in Each Node |